package common;

import java.util.Arrays;

/**
 * @author : Rookie
 * @description : 合并两个有序数组
 * @date : 2023/6/11
 */
public class MergeSortedArray {

    public static void main(String[] args) {
        int[] a = {1, 3, 5, 7};
        int[] b = {2, 4, 6, 8, 10};
        int[] newArray = mergeSortedArray(a, b);
        System.out.println(Arrays.toString(newArray));
    }

    private static int[] mergeSortedArray(int []a, int []b) {
        int m = a.length,n = b.length;
        // 定义三个指针分别指向两个数组和合并后的数组
        int i = 0,j = 0,k = 0;
        // 定义一个新的数组来存储合并后的结果
        int[] newArray = new int[m + n];
        while (i < m && j < n) {
            // 遍历两个数组，将较小的值存入新的数组中
            if (a[i] < b[j]) {
                newArray[k++] = a[i++];
            } else {
                newArray[k++] = b[j++];
            }
        }

        // 如果有一个数组已经遍历完了，将另一个数组的剩余部分直接存入新的数组中
        while (i < m) {
            newArray[k++] = a[i++];
        }
        while (j < n) {
            newArray[k++] = b[j++];
        }
        return newArray;
    }
}
